<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绝对定位的盒子居中</title>
    <style>
        .father {
            width: 800px;
            height: 400px;
            margin: 0 auto;
            border: 1px solid #e1251b;
        }
        .son {
            position: relative;
            width: 200px;
            height: 100px;
            background-color: #108881;
            text-align: center;
            line-height: 100px;
            color: white;
        }
        .son1 {
            left: 50%;
            margin-left: -100px;
        }
        .son4 {
            left: 50%;
            margin-left: -100px;
        }
         .son3{
            left: 50%;
            top: -12.5%;
            margin-left: 200px;
         }
         .son2 {
            top: 12.5%;
         }
        
    </style>
</head>
<body>
    <div class="father">
        <div class="son son1">1</div>
        <div class="son son2">2</div>
        <div class="son son3">3</div>
        <div class="son son4">4</div>
    </div>
</body>

<!-- 
    绝对定位的盒子居中
    left: 50%;：让盒子的左侧移动到父级元素的水平中心位置；
    margin-left: -100px;：让盒子向左移动自身宽度的一半。
 -->

 <!-- 
    定位特殊特性
    绝对定位和固定定位也和浮动类似。

    1.行内元素添加绝对或者固定定位，可以直接设置高度和宽度。
    2.块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小。
    前面我们讲过， display 是 显示模式， 可以改变显示模式有以下方式:
    可以用inline-block 转换为行内块
    可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）
    绝对定位和固定定位也和浮动类似， 默认转换的特性 转换为行内块。
    所以说， 一个行内的盒子，如果加了浮动、固定定位和绝对定位，不用转换，
    就可以给这个盒子直接设置宽度和高度等。

  -->


  <!-- 
    脱标的盒子不会触发外边距塌陷
    浮动元素、**绝对定位(固定定位）**元素的都不会触发外边距合并的问题。
     （我们以前是用padding border overflow解决的）
    也就是说，我们给盒子改为了浮动或者定位，就不会有垂直外边距合并的问题了。
   -->

   <!-- 
    浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字
    （图片）

    但是绝对定位（固定定位） 会压住下面标准流所有的内容。

    浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 
    文字会围绕浮动元素
    -->
</html>